﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using LogicaControl;
using ModeloEntidades;
using System.Text.RegularExpressions;

namespace Interfaces.Consultorio
{
    public partial class UI_Consultorio : Form
    {
        /**************************************************************
        //                       D E L E G A D O S
        **************************************************************/
        public delegate void buscarProfesional(BindingSource unBinding_para_profesional , int sender);
    

        /**************************************************************
        //                         E V E N T O S
        **************************************************************/
        public event buscarProfesional cuandoBusco_profesional;
  

        /**************************************************************
        //                  E N U M E R A C I O N E S
         **************************************************************/
        private enum TiposModulosUI { nuevo, edicion };
        public  enum Sender { titular, profesionales };

        private ControladorConsultorio miControladorConsultorio = new ControladorConsultorio();
        //---------------------------------------------------------------------------------------
        private Consultorio_alta unaPestañaAlta;
        private Consultorio_titular unaPestañaTitular;
        private Consultorio_consultorio unaPestañaConsultorio;
        private ICollection<Consultorio_profesionales> unaPestañaProfesionales;
        //---------------------------------------------------------------------------------------
        private int tipo;

        public UI_Consultorio()
        {
            InitializeComponent();

            tipo = (int)TiposModulosUI.nuevo;

            unaPestañaAlta = miControladorConsultorio.nuevoModelo();
            unaPestañaTitular = unaPestañaAlta.Consultorio_titular;
            unaPestañaConsultorio = unaPestañaAlta.Consultorio_consultorio;
            unaPestañaProfesionales = unaPestañaAlta.Consultorio_profesionales;

            enlazarComponentes();
             
        }
        
        public UI_Consultorio(int unAlta_id)
        {
            InitializeComponent();

            tipo = (int)TiposModulosUI.edicion;

            unaPestañaAlta = miControladorConsultorio.obtener_Alta(unAlta_id);
            unaPestañaTitular = unaPestañaAlta.Consultorio_titular;
            unaPestañaConsultorio = unaPestañaAlta.Consultorio_consultorio;
            unaPestañaProfesionales = unaPestañaAlta.Consultorio_profesionales;

            enlazarComponentes();

        }

        public UI_Consultorio(Consultorio_alta unAlta)
        {
            InitializeComponent();

            tipo = (int)TiposModulosUI.edicion;


            unaPestañaAlta = unAlta;
            unaPestañaTitular = unaPestañaAlta.Consultorio_titular;
            unaPestañaConsultorio = unaPestañaAlta.Consultorio_consultorio;
            unaPestañaProfesionales = unaPestañaAlta.Consultorio_profesionales;

            enlazarComponentes();
            
        }

        private void enlazarComponentes()
        {
            // Agregamos las instancias a los binding de cada pestaña
            bindingSource_alta.Add(unaPestañaAlta); // El binding de las matriculas se afrego por sup de diseño
            bindingSource_titular.Add(unaPestañaTitular);
            bindingSource_consultorio.Add(unaPestañaConsultorio);
            bindingSource_profesionales.DataSource = unaPestañaProfesionales;

            // El binding de profesionales fue hecho por superficie de diseño (clases del diseñador)
        }
  //-------------------------------------------------------------------------------------------------          
       //metodo para limpiar campo
        private void limpiarcampo(Control contenedor)
        {
            foreach (Control obj in contenedor.Controls)
            {
                if (obj is TextBox)
                    obj.Text = "";
                else if (obj is GroupBox)
                    limpiarcampo(obj);
            }
        }

 //-------------------------------------------------------------------------------------------------          

        private void button_alta_guardar_Click(object sender, EventArgs e)
        {
            //--------8
            try
            {
                bindingSource_alta.SuspendBinding();

                if (tipo == (int)TiposModulosUI.nuevo)
                {                    
                    miControladorConsultorio.guardar_Alta(unaPestañaAlta);               
    
                }
                else
                {                  
                    miControladorConsultorio.actualizar();
             
                }
                
                bindingSource_alta.ResumeBinding();
                              
            }
            catch (TypedDataSetGeneratorException ex)
            {

                System.Console.WriteLine(ex.ToString());
            }

            
        }

       
        //------
        private void button_guardar_profesionales_Click(object sender, EventArgs e)
        {
            try
            {
                //miControladorConsultorio.guardar_profesionales(unaPestañaProfesionales);
            }
            catch (TypedDataSetGeneratorException ex)
            {

                System.Console.WriteLine(ex.ToString());
            }
        }

       
        private void textBox_numeroTramite_KeyPress(object sender, KeyPressEventArgs e)
        {  
                                                                       //valida numeros
            if (Char.IsDigit(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                e.Handled = false;
                else
                    if (Char.IsSeparator(e.KeyChar))
                    e.Handled = false;
                    else
                    e.Handled = true;
         }


      
        private void button_agregar_nuevo_profesionales_Click(object sender, EventArgs e)
        {
            bindingSource_profesionales.AllowNew = true;
            bindingSource_profesionales.AddNew();
            bindingSource_profesionales.EndEdit();
           
           
        }

        // Para lista de profesionales
        private void button_agregar_del_colegio_profesionales_Click(object sender, EventArgs e)
        {
            this.cuandoBusco_profesional(this.bindingSource_profesionales, (int)Sender.profesionales);
        }

        // Para titular
        private void button_agregar_del_colegio_profesional_Click(object sender, EventArgs e)
        {
            this.cuandoBusco_profesional(this.bindingSource_titular, (int)Sender.titular);
        }

        private void button_agregar_nuevo_titular_Click(object sender, EventArgs e)
        {

            bindingSource_titular.Clear();
            bindingSource_titular.AddNew();

        }        

        private void textBox_nombre_KeyPress(object sender, KeyPressEventArgs e)
        {
                                                                
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else if (Char.IsControl(e.KeyChar))
                e.Handled = false;
            else if (Char.IsSeparator(e.KeyChar))
                e.Handled = false;
                else
                e.Handled = true;               
        }


        private void textBox_consultorio_nombreOrazonSocial_KeyPress(object sender, KeyPressEventArgs e)
        {
        }

        
        private void textBox_titular_email_Validating(object sender, CancelEventArgs e)
        {
            
          if(!(Regex.Match(textBox_titular_email.Text, @"^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$").Success == true))
                errorProvider1.SetError(textBox_titular_email, "Ingrese una direccion valida");
          else
                errorProvider1.SetError(textBox_titular_email, "");
        }

        private void panel_titular_campos_Paint(object sender, PaintEventArgs e)
        {

        }

        private void textBox_titular_email_TextChanged(object sender, EventArgs e)
        {

        }
        //-----------------------------------------------------------------------------------------------------------
        private void textBox_titular_email_auxiliar_Validating(object sender, CancelEventArgs e)
        {   
            if(textBox_titular_email_auxiliar.Text.Length == 0)
                errorProvider1.SetError(textBox_titular_email_auxiliar, "");
            else if (!(Regex.Match(textBox_titular_email_auxiliar.Text, @"^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$").Success == true))
                errorProvider1.SetError(textBox_titular_email_auxiliar, "Ingrese una direccion valida");
            else
                errorProvider1.SetError(textBox_titular_email_auxiliar, "");
        }
        //-----------------------------------------------------------------------------------------------------------
        private void textBox_consultorio_email_Validating(object sender, CancelEventArgs e)
        {
            if (textBox_consultorio_email.Text.Length == 0)
                errorProvider1.SetError(textBox_consultorio_email, "");
            else if (!(Regex.Match(textBox_consultorio_email.Text, @"^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$").Success == true))
                errorProvider1.SetError(textBox_consultorio_email, "Ingrese una direccion valida");
            else
                errorProvider1.SetError(textBox_consultorio_email, "");
        }

        //-----------------------------------------------------------------------------------------------------------
        //limpia el campo de la pestaña alta 
        private void limpiar_Click(object sender, EventArgs e)
        {
            bindingSource_alta.Clear();
        }
        
        //-----------------------------------------------------------------------------------------------------------
        private void button3_Click(object sender, EventArgs e)
        {
            bindingSource_titular.Clear();
            limpiarcampo(panel_titular_campos);
        }
        //-----------------------------------------------------------------------------------------------------------
        private void button4_Click(object sender, EventArgs e)
        {
            bindingSource_consultorio.Clear();
            limpiarcampo(panel7);
        }

        private void button5_Click(object sender, EventArgs e)
        {
            limpiarcampo(panel23);
            limpiarcampo(panel2);
        }

        private void label31_Click(object sender, EventArgs e)
        {

        }
  } 
        
    
}
